package phpgen;

import java.awt.Color;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.event.*;

import javax.swing.*;

public class INS extends JFrame implements ActionListener
{

    private static final long serialVersionUID = 1L;
    private JList lista1, lista2;
    private DefaultListModel modelo1, modelo2;
    private JButton b;

    public INS()
    {
        setUndecorated(true);
        getRootPane().setWindowDecorationStyle(JRootPane.FRAME);

        getContentPane().setBackground(new Color(100, 110, 100));
        setBounds(250, 200, 550, 180);
        setLayout(null);
        setResizable(false);
        setTitle(
                "Pegando os itens não selecionados de um JList" +
                "- especial para[nezka.slogowickt]");

        //LISTA
        modelo1 = new DefaultListModel();

        String[] nossasLinguas =
        {
            "Java", "C#", "C++", "C", "Pascal", "Clipper", "Visual Basic",
            "Python", "Ruby", "PHP", "Algol", "Cobol", "Portugol"
        };

        for (int i = 0; i < nossasLinguas.length; i++)
        {
            modelo1.addElement(nossasLinguas[i]);
        }

        lista1 = new JList();
        lista1.setModel(modelo1);
        lista1.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
        setEstiloLista(lista1);
        JScrollPane jsp1 = new JScrollPane(lista1);
        jsp1.setBounds(20, 10, 130, 120);
        getContentPane().add(jsp1);

        //LISTA DOS NÃO SELECIONADOS
        modelo2 = new DefaultListModel();
        lista2 = new JList(modelo2);
        setEstiloLista(lista2);
        getContentPane().add(lista2);
        JScrollPane jsp2 = new JScrollPane(lista2);
        jsp2.setBounds(400, 10, 130, 120);
        getContentPane().add(jsp2);
        //BOTÃO
        b = new JButton("Items nâo selecionados");
        b.addActionListener(this);
        setEstiloBotao(b);
        getContentPane().add(b);
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    public void setEstiloLista(JList tmpJList)
    {
        final JList l = tmpJList;
        l.setFont(new Font("Lucida Calligraphy", Font.PLAIN + Font.BOLD, 13));
        l.setForeground(Color.WHITE);
        l.setSelectionForeground(Color.YELLOW);
        l.setSelectionBackground(Color.BLACK);
        l.setBackground(new Color(100, 150, 100));
        l.setBorder(BorderFactory.createBevelBorder(1));
    }

    public void setEstiloBotao(JButton tmp)
    {
        final JButton b = tmp;

        b.setBounds(165, 50, 220, 40);
        b.setFont(new Font("Lucida Calligraphy", Font.PLAIN + Font.BOLD, 13));
        b.setCursor(new Cursor(Cursor.HAND_CURSOR));
        b.setForeground(Color.WHITE);
        b.setBackground(new Color(100, 150, 100));
        b.setToolTipText("Nezka é só clicar aqui para obter os " +
                "elementos NÃO SELECIONADOS na lista do lado esquerdo");
        b.setBorder(BorderFactory.createBevelBorder(0));
        b.addMouseListener(
                new MouseAdapter()
                {

                    public void mouseEntered(MouseEvent e)
                    {
                        b.setBorder(BorderFactory.createBevelBorder(1));
                        b.setForeground(Color.YELLOW);
                    }

                    public void mouseExited(MouseEvent e)
                    {
                        b.setBorder(BorderFactory.createBevelBorder(0));
                        b.setForeground(Color.WHITE);
                    }
                });
    }

    public void actionPerformed(ActionEvent e)
    {
        if (lista1.getSelectedValues().length >= 1)
        {
            Object[] itemsSelecionados = lista1.getSelectedValues();

            System.out.println("Items selecionados: ");
            for (int i = 0; i < itemsSelecionados.length; i++)
            {
                System.out.println(itemsSelecionados[i] + "\n");
            }

            addLista(itemsSelecionados);
        } else
        {
            JOptionPane.showMessageDialog(this,
                    "Selecione pelo menos um item na lista", "NEHUM ITEM SELECIONADO",
                    JOptionPane.WARNING_MESSAGE);
        }
    }

    //RETORNA TODOS OS ITEMS DO LISTA INICIAL(PRINCIPAL)
    public String[] items()
    {
        //modelo2.removeAllElements();

        System.out.println("Todos os elementos da lista 1:");
        String[] tmp = new String[modelo1.getSize()];

        for (int i = 0; i < tmp.length; i++)
        {
            tmp[i] = String.valueOf(modelo1.elementAt(i));
            System.out.println(tmp[i] + "\n");
        }

        return tmp;
    }

    //ADICIONA OS ITEMS NÃO SELECIONADOS NA LISTA 1 E, OS COLOCA NA LISTA 2
    public void addLista(Object[] itemsSelecionados)
    {
        String[] tmp = items();
        boolean naoSelecionado = true;

        modelo2.removeAllElements();
        System.out.println("Items não selecionados: ");
        for (int i = 0; i < tmp.length; i++)
        {
            for (int j = 0; j < itemsSelecionados.length; j++)
            {
                if (tmp[i].equals(String.valueOf(itemsSelecionados[j])))
                {
                    naoSelecionado = false;
                }
            }
            if (naoSelecionado)
            {
                System.out.println(tmp[i] + "");
                modelo2.addElement(tmp[i]);
            }

            naoSelecionado = true;
        }
    }

    public static void main(String[] args)
    {
        new INS();
    }
}
